/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.pod.webservice;

import br.pod.DAO.ProdutoDAO;
import br.pod.model.Produto;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;

/**
 *
 * @author Clenildo Notebook
 */
@WebService(serviceName = "ProdutoWS")
public class ProdutoWS {
    
    ProdutoDAO daoProduto = new ProdutoDAO();
    
    @WebMethod(operationName="cadastro")
    public boolean cadastrar(@WebParam(name="descricao")String descricao,@WebParam(name="preco") double preco,@WebParam(name="quantidade") int quantidade){
        
        if(descricao.trim().equals("") || preco < 1 || quantidade < 1)
            return false;
        
        Produto produto = daoProduto.findProdutoByDescricao(descricao);
        
        if(produto == null){
            produto = new Produto(descricao, preco, quantidade);
        }else{
            return false;
        }

        //Persistencia
        try{
            daoProduto.begin();
            daoProduto.persist(produto);
            daoProduto.commit();
            return true;
        }
        catch(Exception e){
            e.printStackTrace();
            daoProduto.rollback();
            return false;
        }
        finally{
            daoProduto.close();
        }
    }
    
     @WebMethod(operationName="buscar")
    public Produto buscar(@WebParam(name="Codigo_Produto")int doProduto){
        return daoProduto.findProdutoByCodigo(doProduto);
    }
     
    @WebMethod(operationName="atualizar")
    public boolean atualizar(@WebParam(name="codigo_produto")int codProduto,@WebParam(name="descricao")String descricao,@WebParam(name="preco") double preco,@WebParam(name="quantidade") int quantidade){
        Produto produto = this.buscar(codProduto);
        
        if(descricao.trim().equals("") || preco < 1 || quantidade < 1)
            return false;
        
        //Parte Controller
        if(produto != null){
            produto.setDescricao(descricao);
            produto.setPreco(preco);
            produto.setQuantidadeEstoque(quantidade);
            
            //Persistência
            try {
                daoProduto.begin();
                daoProduto.merge(produto);
                daoProduto.commit();
                 return true;
            } catch (Exception e) {
                e.printStackTrace();
                daoProduto.rollback(); 
                return false;
            }finally{
                daoProduto.close();
            }
        }
        return false;
    } 
    
    @WebMethod(operationName="remover")
    public boolean remover(int codigo){
        Produto produto = this.buscar(codigo);
        
        if(produto != null){
            try{
                daoProduto.begin();
                daoProduto.remove(produto);
                daoProduto.commit();
                return true;
            }
            catch(Exception e){
                e.printStackTrace();
                return false;
            }
            finally{
                daoProduto.close();
            }
        }
        
        return false;
    }
    
}
